home *** CD-ROM | disk | FTP | other *** search
/ MacTech 1 to 12 / MacTech-vol-1-12.toast / Source / MacTech® Magazine / Volume 05 - 1989 / 05.02 Feb 89 / security code / BitProcs.Pas < prev    next >
Encoding:
Pascal/Delphi Source File  |  1988-11-29  |  4.5 KB  |  216 lines  |  [TEXT/MPS ]

  1. UNIT  BitProcs;
  2. {-------------------------------------------}
  3. (*
  4. ©1988 by Steve Seaquist. All rights reserved.
  5. Used by permission.  Use at your own risk.  
  6. No warranty is expressed or implied.  
  7.  
  8. This Macintosh virus-detecting program was 
  9. originally published and explained in the 
  10. February 1989 issue of MacTutor magazine.  
  11. Some aspects of its design are important to 
  12. security, and it uses some unusual 
  13. techniques, so please read the article.  
  14. *)
  15. {-------------------------------------------}
  16. INTERFACE
  17. USES
  18.   MacIntf;
  19. {$S Fingerprint}
  20.  
  21. TYPE
  22.   TPackedArrayOfChar  = 
  23.     PACKED ARRAY[1..1] OF CHAR;
  24.  
  25. FUNCTION   BAnd
  26.   (pLong1:   LONGINT;
  27.   pLong2:    LONGINT)
  28.   :          LONGINT;
  29. PROCEDURE  BClr
  30.   (VAR pLong:LONGINT;
  31.   pBitno:    INTEGER);
  32. FUNCTION   BNot
  33.   (pLong:    LONGINT)
  34.   :          LONGINT;
  35. FUNCTION   BOr
  36.   (pLong1:   LONGINT;
  37.   pLong2:    LONGINT)
  38.   :          LONGINT;
  39. FUNCTION   BRotL
  40.   (pLong:    LONGINT;
  41.   pCount:    INTEGER)
  42.   :          LONGINT;
  43. FUNCTION   BRotR
  44.   (pLong:    LONGINT;
  45.   pCount:    INTEGER)
  46.   :          LONGINT;
  47. PROCEDURE  BSet
  48.   (VAR pLong:LONGINT;
  49.   pBitno:    INTEGER);
  50. FUNCTION   BSL
  51.   (pLong:    LONGINT;
  52.   pCount:    INTEGER)
  53.   :          LONGINT;
  54. FUNCTION   BSR
  55.   (pLong:    LONGINT;
  56.   pCount:    INTEGER)
  57.   :          LONGINT;
  58. FUNCTION   BTst
  59.   (pLong:    LONGINT;
  60.   pBitno:    INTEGER)
  61.   :          BOOLEAN;
  62. FUNCTION   BXor
  63.   (pLong1:   LONGINT;
  64.   pLong2:    LONGINT)
  65.   :          LONGINT;
  66. PROCEDURE  FillChar
  67.   (pTo:      TPackedArrayOfChar;
  68.   pCount:    Size;
  69.   pChar:     CHAR);
  70. FUNCTION   HiWrd
  71.   (pLong:    LONGINT)
  72.   :          INTEGER;
  73. FUNCTION   LoWrd
  74.   (pLong:    LONGINT)
  75.   :          INTEGER;
  76. PROCEDURE  MoveLeft
  77.   (VAR pFrom:SignedByte;
  78.   VAR pTo:   SignedByte;
  79.   pCount:    Size);
  80. PROCEDURE  MoveRight
  81.   (VAR pFrom:SignedByte;
  82.   VAR pTo:   SignedByte;
  83.   pCount:    Size);
  84.  
  85. {*******************************************}
  86. IMPLEMENTATION
  87. {$R-}
  88.  
  89. {-------------------------------------------}
  90. FUNCTION   BAnd
  91.   (pLong1:   LONGINT;
  92.   pLong2:    LONGINT)
  93.   :          LONGINT;
  94. BEGIN
  95. BAnd := BitAnd(pLong1,pLong2);
  96. END;
  97. {-------------------------------------------}
  98. PROCEDURE  BClr
  99.   (VAR pLong:LONGINT;
  100.   pBitno:    INTEGER);
  101. BEGIN
  102. ClearBit(pLong,pBitno);
  103. END;
  104. {-------------------------------------------}
  105. FUNCTION   BNot
  106.   (pLong:    LONGINT)
  107.   :          LONGINT;
  108. BEGIN
  109. BNot := BitNot(pLong);
  110. END;
  111. {-------------------------------------------}
  112. FUNCTION   BOr
  113.   (pLong1:   LONGINT;
  114.   pLong2:    LONGINT)
  115.   :          LONGINT;
  116. BEGIN
  117. BOr  := BitOr(pLong1,pLong2);
  118. END;
  119. {-------------------------------------------}
  120. FUNCTION   BRotL
  121.   (pLong:    LONGINT;
  122.   pCount:    INTEGER)
  123.   :          LONGINT;
  124. BEGIN
  125. BRotL  := BitRotL(pLong,pCount);
  126. END;
  127. {-------------------------------------------}
  128. FUNCTION   BRotR
  129.   (pLong:    LONGINT;
  130.   pCount:    INTEGER)
  131.   :          LONGINT;
  132. BEGIN
  133. BRotR  := BitRotR(pLong,pCount);
  134. END;
  135. {-------------------------------------------}
  136. PROCEDURE  BSet
  137.   (VAR pLong:LONGINT;
  138.   pBitno:    INTEGER);
  139. BEGIN
  140. SetBit(pLong,pBitno);
  141. END;
  142. {-------------------------------------------}
  143. FUNCTION   BSL
  144.   (pLong:    LONGINT;
  145.   pCount:    INTEGER)
  146.   :          LONGINT;
  147. BEGIN
  148. BSL  := BitSL(pLong,pCount);
  149. END;
  150. {-------------------------------------------}
  151. FUNCTION   BSR
  152.   (pLong:    LONGINT;
  153.   pCount:    INTEGER)
  154.   :          LONGINT;
  155. BEGIN
  156. BSR  := BitSR(pLong,pCount);
  157. END;
  158. {-------------------------------------------}
  159. FUNCTION   BTst
  160.   (pLong:    LONGINT;
  161.   pBitno:    INTEGER)
  162.   :          BOOLEAN;
  163. BEGIN
  164. BTst := BitTest(pLong,pBitno);
  165. END;
  166. {-------------------------------------------}
  167. FUNCTION   BXor
  168.   (pLong1:   LONGINT;
  169.   pLong2:    LONGINT)
  170.   :          LONGINT;
  171. BEGIN
  172. BXor := BitXor(pLong1,pLong2);
  173. END;
  174. {-------------------------------------------}
  175. PROCEDURE  FillChar
  176.   (pTo:      TPackedArrayOfChar;
  177.   pCount:    Size;
  178.   pChar:     CHAR);
  179. VAR
  180.   i:         INTEGER;
  181. BEGIN
  182. FOR i := 1 TO pCount DO
  183.   pTo[i] := pChar;
  184. END;
  185. {-------------------------------------------}
  186. FUNCTION   HiWrd
  187.   (pLong:    LONGINT)
  188.   :          INTEGER;
  189. BEGIN
  190. HiWrd := HiWord(pLong);
  191. END;
  192. {-------------------------------------------}
  193. FUNCTION   LoWrd
  194.   (pLong:    LONGINT)
  195.   :          INTEGER;
  196. BEGIN
  197. LoWrd := LoWord(pLong);
  198. END;
  199. {-------------------------------------------}
  200. PROCEDURE  MoveLeft
  201.   (VAR pFrom:SignedByte;
  202.   VAR pTo:   SignedByte;
  203.   pCount:    Size);
  204. BEGIN
  205. BlockMove(@pFrom,@pTo,pCount);
  206. END;
  207. {-------------------------------------------}
  208. PROCEDURE  MoveRight
  209.   (VAR pFrom:SignedByte;
  210.   VAR pTo:   SignedByte;
  211.   pCount:    Size);
  212. BEGIN
  213. BlockMove(@pFrom,@pTo,pCount);
  214. END;
  215. {*******************************************}
  216. END.